# -*- coding: utf-8 -*-
"""
@Time ： 2023/4/1 19:59
@Auth ： Mr. William 1052949192
@Company ：特斯汀学院 @testingedu.com.cn
@Function ：作业：封装浏览器启动类
"""
from selenium import webdriver
# 导入多个重名的类，怎么办？
from selenium.webdriver.chrome.options import Options as GCOptions
from selenium.webdriver.edge.options import Options as EDOptions


class MyWeb:

    def __init__(self):
        # 实例变量要在构造函数里面定义
        self.driver: webdriver.Chrome = None

    def open_browser(self, browser: str = 'gc'):
        """打开浏览器"""
        if browser == 'ie':
            self.driver = webdriver.Ie()
        elif browser=='ed':
            option = EDOptions()
            # 不自动关闭浏览器的配置
            option.add_experimental_option("detach", True)
            # 在打开浏览器之前，去掉自动化标识
            option.add_experimental_option('excludeSwitches', ['enable-automation'])
            option.add_argument('--disable-blink-features=AutomationControlled')

            ## 关掉密码弹窗
            prefs = {}
            prefs['credentials_enable_service'] = False
            prefs['profile.password_manager_enabled'] = False
            option.add_experimental_option('prefs', prefs)

            # 使用初始化后的浏览器配置文件
            option.add_argument(r'--user-data-dir=D:\edge_dir1')

            self.driver = webdriver.Edge(options=option)
        else:
            option = GCOptions()
            # 不自动关闭浏览器的配置
            option.add_experimental_option("detach", True)
            # 在打开浏览器之前，去掉自动化标识
            option.add_experimental_option('excludeSwitches', ['enable-automation'])
            option.add_argument('--disable-blink-features=AutomationControlled')

            ##关掉密码弹窗
            prefs = {}
            prefs['credentials_enable_service'] = False
            prefs['profile.password_manager_enabled'] = False
            option.add_experimental_option('prefs', prefs)

            self.driver = webdriver.Chrome(options=option)

        # 隐式等待
        self.driver.implicitly_wait(10)
        # 最大化
        self.driver.maximize_window()

    def set_wait(self,t=10):
        """设置隐式等待"""
        # 跨函数使用driver的时候，不知道driver的类型
        # 我们可以在构造函数里面定义的时候指定类型，通过冒号指定
        self.driver.implicitly_wait(t)


if __name__ == '__main__':
    my_web = MyWeb()
    my_web.open_browser('ie')
    my_web.set_wait(3)